﻿#define _CRT_SECURE_NO_WARNINGS 
#include"Date.h"


//int main()
//{
//	Date d1(2024, 8, 19);
//	d1.Print();
//	Date d2(2024, 8, 20);
//	cout << d2.operator<(d1) << endl;
//	return 0;
//}


//int main()
//{
//	Date d1(2024, 7, 26);
//	Date d2(2024, 7, 21);
//	// 已经存在的两个对象之间复制拷贝        -- 运算符重载函数
//	d1 = d2;
//
//	// 用一个已经存在的对象初始化另一个对象  -- 构造函数
//	//Date d3(d1);
//
//	int i, j, k;
//	i = j = k = 0;
//
//	Date d5, d4;
//	d5 = d4 = d1;
//
//	d1 = d1;
//
//	return 0;
//}

//class Date
//{
//public:
//	Date(int year = 1900, int month = 1, int day = 1)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//	// Date(const Date& d)   // 正确写法
//	Date(const Date& d)   // 错误写法：编译报错，会引发无穷递归
//	{
//		_year = d._year;
//		_month = d._month;
//		_day = d._day;
//	}
//private:
//	int _year;
//	int _month;
//	int _day;
//};
//int main()
//{
//	Date d1;
//	Date d2(d1);
//	return 0;
//}

class Time
{
public:
	Time()
	{
		_hour = 1;
		_minute = 1;
		_second = 1;
	}
	Time(const Time& t)
	{
		_hour = t._hour;
		_minute = t._minute;
		_second = t._second;
		cout << "Time::Time(const Time&)" << endl;
	}
private:
	int _hour;
	int _minute;
	int _second;
};
class Date
{
private:
	// 基本类型(内置类型)
	int _year = 1970;
	int _month = 1;
	int _day = 1;
	// 自定义类型
	Time _t;
};
int main()
{
	Date d1;

	// 用已经存在的d1拷贝构造d2，此处会调用Date类的拷贝构造函数
	// 但Date类并没有显式定义拷贝构造函数，则编译器会给Date类生成一个默认的拷贝构造函数
		Date d2(d1);
	return 0;
}





//void TestDate1()
//{
//	Date d1(2023, 4, 26);
//	d1 += 100;
//	d1.Print();
//
//	Date d2(2023, 4, 26);
//	//Date d3(d2 + 100);
//	Date d3 = d2 + 100;
//	d2.Print();
//	d3.Print();
//
//	// 用一个已经存在的对象初始化另一个对象  -- 构造函数
//	Date d4 = d2;  // 等价于 Date d4(d2);
//
//	//已经存在的两个对象之间复制拷贝        -- 运算符重载函数
//	d4 = d1;
//
//	//int i = 0, j = 1;
//	//j += i += 10;
//}

//void TestDate2()
//{
//	Date d1(2023, 4, 26);
//	// 都要++，前置++返回++以后的对象，后置++返回++之前的对象
//	++d1; // d1.operator++()
//	d1++; // d1.operator++(0)
//}

//int main()
//{
//	TestDate2();
//
//	return 0;
//}